/**
*Llaman al constructor por defecto, luego le dan startConnection(), hay un metodo en donde pueden ejecutar sus queries y
*retornar las tuplas que necesitan... (La clase es ResultSet) solo tienen que importar en sus clases (java.sql.*) y listo!
*
*Para obtener el valor de un atributo, deben usar el metodo (getObject("nombre de la columna")), y retorna un Objeto el cual
*se debe convertir al tipo de atributo requerido
*
*/

package semac.control;

import java.sql.*;

import java.io.File;
import java.io.IOException;
import org.w3c.dom.*;

import javax.xml.parsers.*;
import org.xml.sax.SAXException;
/**
 *
 * @author Elit V
 */
public class Conexion {
    //Controlador para realizar conexiones--------------------------------------
    private String jdbc;
    //url de la base de datos---------------------------------------------------
    private String urlDB;
    //Usuario para tener acceso a la base de datos------------------------------
    private String user;
    //Password requerido para la conexion---------------------------------------
    private String password;


    //Realiza la conexion a la base de datos-----------------------------------
    private Connection conexion;
    //Envia la instruccion sql a ejecutar---------------------------------------
    private Statement instruccion;



    public Conexion(String configFile) throws IOException, ParserConfigurationException, SAXException{
        initFromXml(configFile);
    }

    //Lee el archivo de configuracion obteniendo los datos para conexion--------
    private void initFromXml(String filePath) throws IOException, ParserConfigurationException, SAXException{
        DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = docBuilder.parse(new File(filePath));
        doc.getDocumentElement().normalize();

        NodeList config;

        config = doc.getElementsByTagName("jdbc");
        jdbc = config.item(0).getTextContent();

        config = doc.getElementsByTagName("url");
        urlDB = config.item(0).getTextContent();

        config = doc.getElementsByTagName("user");
        user = config.item(0).getTextContent();

        config = doc.getElementsByTagName("password");
        password = config.item(0).getTextContent();
    }

    public Conexion(String jdbc, String urlDB, String user, String password){
        this.jdbc = jdbc;
        this.urlDB = urlDB;
        this.user = user;
        this.password = password;
    }

    //Realiza la conexion con la base de datos----------------------------------
    public void startConnection() throws ClassNotFoundException, SQLException{
        Class.forName(jdbc);
        conexion = DriverManager.getConnection(urlDB, user, password);
        instruccion = conexion.createStatement();
    }

    //Cierra la conexion--------------------------------------------------------
    public void closeConnection() throws SQLException{
        instruccion.close();
        conexion.close();
    }

    /*Ejecuta el query que se envia como parametro y retorna un set de resultados con las tuplas obtenidas*/
    public ResultSet execute(String query) throws SQLException{
        ResultSet result = this.instruccion.executeQuery(query);
        return result;
    }

    public String getUrlDB(){
        return urlDB;
    }
}
